# Аналитическая часть курсовой работы


## Проектирование структуры и компонентов программного комплекса

После уточнения интерфейса выполняется декомпозиция предметной области
задачи в соответствии с выбранной технологией, т. е. создается
структурная схема будущего продукта и описывается взаимодействие его
функциональных элементов.

Структурная схема --- схема, отражающая состав и взаимодействие по
управлению частей разрабатываемого продукта. При объектной
декомпозиции такими частями являются объекты, при структурной
декомпозиции --- подпрограммы.

Для тем, связанных с нечисловой обработкой данных, этот раздел также
должен содержать информационную модель системы, которая может быть
представлена функциональной схемой или диаграммой потоков
данных. Функциональная схема --- схема взаимодействия частей системы с
описанием информационных потоков, состава данных в потоках и указанием
используемых файлов и устройств.

Далее описывается проектирование компонентов в соответствии с
выбранной технологией. Для программы, использующей структурный подход
к программированию, в данном разделе приводятся обобщенные алгоритмы,
например, алгоритм основной программы (рис. [-@fig:main-program-diagram]) и описывается межпрограммный
интерфейс подпрограмм.

```{.plantuml #fig:main-program-diagram caption="Схема основной программы" width=70%}
@startuml

start

repeat

  :Тестирование;

    if (Что-то пошло не так?) then (нет)
      #palegreen :Тест пройден;
      break
    endif

    ->ошибка;

    :Сообщение: "Длинное сообщение об ошибке";

repeat while (Что-то пошло не так при\nвыводе сообщения об ошибке?) is (да) not (нет)

:Сообщение: "Всё прошло успешно";

stop

@enduml
```

Всего приводятся два--три из наиболее интересных алгоритмов,
включая алгоритм основной программы при структурном подходе.

Каждый алгоритм должен быть представлен:

  * схемой алгоритма (алгоритм может быть представлен в псевдокоде или в виде блок-схем);
  * описанием процесса обработки данных в соответствии с приведённой схемой алгоритма.

Описание каждого алгоритма должно включать:

  * функциональное назначение алгоритма;
  * входные и выходные данные (результаты выполнения);
  * список формальных параметров и их назначение;
  * пример вызова модуля или подпрограммы;
  * используемые технические средства;
  * ссылку на таблицу переменных алгоритма;
  * ссылку на рисунок со схемой алгоритма;
  * описание процесса обработки данных в соответствии со схемой;
  * если имеется приложение с полным текстом программы, то ссылку на соответствующую страницу приложения.

При описании процесса обработки данных в соответствии со схемой
алгоритма необходимо пояснить все циклы, каждую альтернативу
ветвления, принятое решение по результатам анализа альтернатив и
последующие действия.

Тексты описания алгоритмов должны быть структурными, предложения
короткими. Описание алгоритма должно отражать суть процесса обработки.

Для программы, при разработке которой использовалась
объектно-ориентированная технология, обязательно должна описываться
иерархия или диаграмма классов (рис. [-@fig:class-namespace-diagram]).

```{.plantuml #fig:class-namespace-diagram caption="Диаграмма пространства имён класса" width=70%}
@startuml
class Метрики

namespace Сеть.ожидание #DDDDDD {
	.Метрики <|-- Пользователь
	Встреча o-- Пользователь
	.Метрики <|- Встреча
}

namespace Сеть.действующий {
  Сеть.ожидание.Пользователь <|- Пользователь
  .Метрики <|-- Пользователь
  Сеть.ожидание.Встреча o-- Пользователь
}
Метрики <|-- Сеть.завершенный.Пользователь
@enduml
```

Для каждого класса желательно указать дополнительные поля и методы,
соответственно обосновывая их назначение и функции. При необходимости
здесь же можно привести алгоритмы некоторых методов.

Для пояснения особенностей реализации классов или специфики событийной
обработки можно использовать дополнительные иллюстрации, например,
диаграммы последовательности действий (рис. [-@fig:auth-diagram]).

```{.plantuml #fig:auth-diagram caption="Диаграмма процесса аутентификации" width=70%}
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
@enduml
```

В завершении раздела описывается декомпозиция разрабатываемой
программы на модули и приводится диаграмма компоновки программного
продукта.

Кроме того, в этом же разделе желательно указать вариант разработки
(«восходящая» или «нисходящая») и обосновать свой выбор.


## Подготовка тестовых данных

В этом разделе выбирается стратегия и методы тестирования. В
соответствии с выбранной стратегией и методами строятся примеры тестов
(обязательно с предполагаемыми результатами тестирования). Данные
тестов рекомендуется представить в виде таблиц.
